package kr.pe.johnkim.chattingday.mobile.rest.service;

import kr.pe.johnkim.chattingday.mobile.domain.ChattingDayMember;

import java.util.List;

/**
 * ChattingDay 사용자 관련 서비스 메소드들을 정의하는 인터페이스 이다.
 * 
 * @author : johnkim <cale9797@gmail.com / Bettersoft Inc,.>
 * @Date : 12. 5. 17
 */
public interface ChattingDayMemberService {
    /**
     * 사용자 등록을 위해서 아이디 중복 검사를 한다.
     *
     * TotalCount 를 반환 한다.
     *
     * @param chattingDayMember
     * @return ChattingDayMember
     */
    public ChattingDayMember checkIdDuplication(ChattingDayMember chattingDayMember);

    /**
     * 사용자 등록을 위해서 메일 중복 검사를 한다.
     *
     * TotalCount 를 반환 한다.
     *
     * @param chattingDayMember
     * @return
     */
    public ChattingDayMember checkMailDuplication(ChattingDayMember chattingDayMember);

    /**
     * 사용자를 등록 한다.
     *
     * @param chattingDayMember
     * @return TRUE/FALSE
     */
    public boolean registerMember(ChattingDayMember chattingDayMember);

    /**
     * 사용자 정보를 가져 온다.
     *
     * @param chattingDayMember
     * @return ChattingDayMember
     */
    public ChattingDayMember selectMemberInformation(ChattingDayMember chattingDayMember);

    /**
     * 사용자 로그인을 한다.
     *
     * @param chattingDayMember
     * @return
     */
    public ChattingDayMember login(ChattingDayMember chattingDayMember);

    /**
     * 사용자 목록을 가져 온다.
     *
     * @param chattingDayMember
     * @return List<ChattingDayMember>
     */
    public List<ChattingDayMember> selectMemberList(ChattingDayMember chattingDayMember);

    /**
     * 사용자 정보를 수정 한다.
     *
     * @param chattingDayMember
     * @return TRUE/FALSE
     */
    public boolean updateMemberInformation(ChattingDayMember chattingDayMember);

    /**
     * 사용자를 비활성화 한다.
     * 
     * @param chattingDayMember
     * @return TRUE/FALSE
     */
    public boolean updateDeactivateMember(ChattingDayMember chattingDayMember);

    /**
     * 사용자 마일리지를 가져 온다.
     *
     * @param chattingDayMember
     * @return
     */
    public ChattingDayMember selectMileage(ChattingDayMember chattingDayMember);

    /**
     * 사용자 마일리지를 수정 한다.
     *
     * @param chattingDayMember
     * @return TRUE/FALSE
     */
    public boolean updateMileage(ChattingDayMember chattingDayMember);

    /**
     * 사용자 벌점을 수정 한다.
     *
     * @param chattingDayMember
     * @return TRUE/FALSE
     */
    public boolean updateRestrictionCount(ChattingDayMember chattingDayMember);

    /**
     * 사용자 사용제한 여부를 수정 한다.
     *
     * @param chattingDayMember (Y/N)
     * @return TRUE/FALSE
     */
    public boolean updateRestrictionStatus(ChattingDayMember chattingDayMember);

    /**
     * 사용자 로그 상태를 업데이트 한다.
     *
     * @param chattingDayMember (IN/OUT)
     * @return TRUE/FALSE
     */
    public boolean updateLogStatus(ChattingDayMember chattingDayMember);

    /**
     * 사용자 채팅방 참석 여부를 업데이트 한다.
     *
     * @param chattingDayMember (ON/OFF)
     * @return TRUE/FALSE
     */
    public boolean updateChatStatus(ChattingDayMember chattingDayMember);

    /**
     * 사용자 Google GCM Registration Id 를 업데이트 한다.
     *
     * @param chattingDayMember
     * @return TRUE/FALSE
     */
    public boolean updateRegistrationId(ChattingDayMember chattingDayMember);
}
